/*
 * Copyright (c) 2018-2025 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

namespace TencentCloud.Kms.V20190118.Models
{
    using Newtonsoft.Json;
    using System.Collections.Generic;
    using TencentCloud.Common;

    public class GetServiceStatusResponse : AbstractModel
    {
        
        /// <summary>
        /// Whether the KMS service has been activated. true: activated
        /// </summary>
        [JsonProperty("ServiceEnabled")]
        public bool? ServiceEnabled{ get; set; }

        /// <summary>
        /// Service unavailability type: 0-not purchased, 1-normal, 2-service suspended due to overdue payments, 3-resource release.
        /// </summary>
        [JsonProperty("InvalidType")]
        public long? InvalidType{ get; set; }

        /// <summary>
        /// 0: Basic Edition, 1: Ultimate Edition
        /// </summary>
        [JsonProperty("UserLevel")]
        public ulong? UserLevel{ get; set; }

        /// <summary>
        /// Specifies the expiry time (Epoch Unix Timestamp) of the flagship edition.
        /// </summary>
        [JsonProperty("ProExpireTime")]
        public ulong? ProExpireTime{ get; set; }

        /// <summary>
        /// Specifies whether the flagship edition is automatically renewed: 0 - no automatic renewal, 1 - automatic renewal.
        /// </summary>
        [JsonProperty("ProRenewFlag")]
        public ulong? ProRenewFlag{ get; set; }

        /// <summary>
        /// Flagship edition purchase record unique identifier. if not activated, the return value is empty.
        /// </summary>
        [JsonProperty("ProResourceId")]
        public string ProResourceId{ get; set; }

        /// <summary>
        /// Whether to enable the KMS-managed version.
        /// </summary>
        [JsonProperty("ExclusiveVSMEnabled")]
        public bool? ExclusiveVSMEnabled{ get; set; }

        /// <summary>
        /// Whether to enable the exclusive edition of KMS.
        /// </summary>
        [JsonProperty("ExclusiveHSMEnabled")]
        public bool? ExclusiveHSMEnabled{ get; set; }

        /// <summary>
        /// Specifies the KMS subscription information.
        /// </summary>
        [JsonProperty("SubscriptionInfo")]
        public string SubscriptionInfo{ get; set; }

        /// <summary>
        /// Returns the amount of KMS user secret keys used.
        /// </summary>
        [JsonProperty("CmkUserCount")]
        public ulong? CmkUserCount{ get; set; }

        /// <summary>
        /// Returns the specification quantity of KMS user secret keys.
        /// </summary>
        [JsonProperty("CmkLimit")]
        public ulong? CmkLimit{ get; set; }

        /// <summary>
        /// Return dedicated cluster group.
        /// </summary>
        [JsonProperty("ExclusiveHSMList")]
        public ExclusiveHSM[] ExclusiveHSMList{ get; set; }

        /// <summary>
        /// Whether data key management is supported. valid values: 1 (supported), 0 (unsupported).
        /// </summary>
        [JsonProperty("IsAllowedDataKeyHosted")]
        public bool? IsAllowedDataKeyHosted{ get; set; }

        /// <summary>
        /// Valid when IsAllowedDataKeyHosted is 1. specifies the purchase quota for data keys.
        /// </summary>
        [JsonProperty("DataKeyLimit")]
        public ulong? DataKeyLimit{ get; set; }

        /// <summary>
        /// Valid when IsAllowedDataKeyHosted is 1. data key free quota.
        /// </summary>
        [JsonProperty("FreeDataKeyLimit")]
        public ulong? FreeDataKeyLimit{ get; set; }

        /// <summary>
        /// Valid at that time when IsAllowedDataKeyHosted is 1. specifies the number of keys used.
        /// </summary>
        [JsonProperty("DataKeyUsedCount")]
        public ulong? DataKeyUsedCount{ get; set; }

        /// <summary>
        /// Specifies the target region of the sync task.
        /// </summary>
        [JsonProperty("SyncTaskList")]
        public DestinationSyncConfig[] SyncTaskList{ get; set; }

        /// <summary>
        /// Whether synchronization task is supported. true: supported; false: unsupported.
        /// </summary>
        [JsonProperty("IsAllowedSync")]
        public bool? IsAllowedSync{ get; set; }

        /// <summary>
        /// The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
        /// </summary>
        [JsonProperty("RequestId")]
        public string RequestId{ get; set; }


        /// <summary>
        /// For internal usage only. DO NOT USE IT.
        /// </summary>
        public override void ToMap(Dictionary<string, string> map, string prefix)
        {
            this.SetParamSimple(map, prefix + "ServiceEnabled", this.ServiceEnabled);
            this.SetParamSimple(map, prefix + "InvalidType", this.InvalidType);
            this.SetParamSimple(map, prefix + "UserLevel", this.UserLevel);
            this.SetParamSimple(map, prefix + "ProExpireTime", this.ProExpireTime);
            this.SetParamSimple(map, prefix + "ProRenewFlag", this.ProRenewFlag);
            this.SetParamSimple(map, prefix + "ProResourceId", this.ProResourceId);
            this.SetParamSimple(map, prefix + "ExclusiveVSMEnabled", this.ExclusiveVSMEnabled);
            this.SetParamSimple(map, prefix + "ExclusiveHSMEnabled", this.ExclusiveHSMEnabled);
            this.SetParamSimple(map, prefix + "SubscriptionInfo", this.SubscriptionInfo);
            this.SetParamSimple(map, prefix + "CmkUserCount", this.CmkUserCount);
            this.SetParamSimple(map, prefix + "CmkLimit", this.CmkLimit);
            this.SetParamArrayObj(map, prefix + "ExclusiveHSMList.", this.ExclusiveHSMList);
            this.SetParamSimple(map, prefix + "IsAllowedDataKeyHosted", this.IsAllowedDataKeyHosted);
            this.SetParamSimple(map, prefix + "DataKeyLimit", this.DataKeyLimit);
            this.SetParamSimple(map, prefix + "FreeDataKeyLimit", this.FreeDataKeyLimit);
            this.SetParamSimple(map, prefix + "DataKeyUsedCount", this.DataKeyUsedCount);
            this.SetParamArrayObj(map, prefix + "SyncTaskList.", this.SyncTaskList);
            this.SetParamSimple(map, prefix + "IsAllowedSync", this.IsAllowedSync);
            this.SetParamSimple(map, prefix + "RequestId", this.RequestId);
        }
    }
}

